package br.com.saeng2D.superficie.select;

import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import br.com.saeng2D.formulario.FormularioPrincipal;
import br.com.saeng2D.objeto.AbstratoObjeto;
import br.com.saeng2D.objeto.linha.Linha;
import br.com.saeng2D.objeto.ponto.Ponto;
import br.com.saeng2D.superficie.Superficie;
import br.com.saeng2D.util.Constantes;
import br.com.saeng2D.util.Util;

public class SelecionadorPonto2 extends SelecionadorState {
	private FormularioPrincipal form;
	
	
	
	public SelecionadorPonto2(SelecionadorSuperficieClone selecionadorSuperficieClone) {
		super(selecionadorSuperficieClone);
	}

	public void processarPonto(Superficie superficie, MouseEvent e) {
		form = superficie.getFormularioPrincipal();
		int x = e.getX();
		int y = e.getY();
		List<Linha> lista = new ArrayList<Linha>();
		for (AbstratoObjeto objeto : superficie.getObjetos()) {
			if(objeto instanceof Linha) {
				Linha linha = (Linha) objeto;
				Ponto ponto1 = linha.getPonto1();
				Ponto ponto2 = linha.getPonto2();
				boolean linhaAdicionada = false;
				if(ponto1.estarSob(x, y) && ponto1.getCorPlotado() != null) {
					ponto1.criarMemento();
					ponto1.setCorPlotado(Constantes.COR_SELECIONADO);
					lista.add(linha);
					linhaAdicionada = true;

				} else {
					ponto1.restaurarMemento();
				}
				if(ponto2.estarSob(x, y) && ponto2.getCorPlotado() != null) {
					ponto2.criarMemento();
					ponto2.setCorPlotado(Constantes.COR_SELECIONADO);
					if(!linhaAdicionada) {
						lista.add(linha);
					}
					
				} else {
					ponto2.restaurarMemento();
				}
			}
		}
		
		for (Linha linha : lista) {
			 superficie.excluirObjeto(linha);
		}
		for (Linha linha : lista) {
			 superficie.adicionarObjeto(linha);
		}
		superficie.repaint();
		int cont=0;
		for (AbstratoObjeto objeto : superficie.getObjetos()) {
			if(objeto instanceof Linha){
				Linha linha = (Linha) objeto;
				Ponto ponto1 = linha.getPonto1();
				Ponto ponto2 = linha.getPonto2();
				if(ponto1.isSelecionado()){
					cont++;
				}
				if(ponto2.isSelecionado()){
				    cont++;
				}
			}
		}
		if(cont==0){
			form.verificaSeHaPontoSelecionado();
		}
	}
	
	public void processarSomatorioX(Superficie superficie, MouseEvent e) {
	}

	public void processarSomatorioY(Superficie superficie, MouseEvent e) {
	}

	public void processarSomatorioMomento(Superficie superficie, MouseEvent e) {
	}
}